import numpy as np
alt.data_transformers.disable_max_rows()
# Preparar datos de predicción
df_vp = pd.DataFrame({
'Valores_Reales': y_test,
'Predicciones': y_pred_pipe
})
# Leer datos de estudiantes
df_estudiantes = pd.read_csv('estudios.csv', sep=';')
# Agrupar estudiantes por provincia
df_provincias = df_estudiantes.groupby('Provincia').agg({
'Total_Estudiantes': 'sum'
}).reset_index().sort_values('Total_Estudiantes', ascending=False)
# Crear selector para zoom/interacción
zoom = alt.selection_interval(bind='scales')
# 1. Gráfico scatter con línea de referencia
min_val, max_val = df_vp['Valores_Reales'].min(), df_vp['Valores_Reales'].max()
scatter = alt.Chart(df_vp).mark_circle(size=60, opacity=0.6).encode(
x=alt.X('Valores_Reales', scale=alt.Scale(domain=[min_val, max_val])),
y=alt.Y('Predicciones', scale=alt.Scale(domain=[min_val, max_val])),
tooltip=['Valores_Reales', 'Predicciones']
).add_selection(zoom)
line = alt.Chart(pd.DataFrame({'x': [min_val, max_val]})).mark_line(
color='red', strokeDash=[5, 5]
).encode(x='x', y='x')
scatter_plot = (scatter + line).properties(
width=600,
height=400,
title='Predicciones vs Valores Reales'
)
# 2. Distribución de estudiantes por provincia
grafico_provincias = alt.Chart(df_provincias).mark_bar().encode(
x=alt.X('Total_Estudiantes:Q', title='Número de Estudiantes'),
y=alt.Y('Provincia:N', sort='-x', title='Provincia'),
color=alt.Color('Total_Estudiantes:Q', scale=alt.Scale(scheme='blues')),
tooltip=['Provincia', 'Total_Estudiantes']
).properties(
width=600,
height=400,
title='Distribución de Estudiantes por Provincia'
).add_selection(zoom)
# 3. Métricas de rendimiento (alternativa ligera a curva de aprendizaje)
from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error
metricas = {
'Métrica': ['RMSE', 'MAE', 'R²'],
'Valor': [
np.sqrt(mean_squared_error(y_test, y_pred_pipe)),
mean_absolute_error(y_test, y_pred_pipe),
r2_score(y_test, y_pred_pipe)
]
}
df_metricas = pd.DataFrame(metricas)
grafico_metricas = alt.Chart(df_metricas).mark_bar().encode(
x=alt.X('Valor:Q', title='Valor'),
y=alt.Y('Métrica:N', title=''),
color=alt.Color('Métrica:N', legend=None),
tooltip=['Métrica', alt.Tooltip('Valor:Q', format='.4f')]
).properties(
width=600,
height=200,
title='Métricas de Rendimiento del Modelo'
)
# Mostrar todos los gráficos
(scatter_plot & grafico_provincias & grafico_metricas)